package com.itheima.studentsystem;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86131
 * Date: 2024-01-30
 * Time: 14:01
 */
public class StudentSystem {
    public static void starStudentSystem() {
        ArrayList<Student> list = new ArrayList<>();  //创建集合
        loop: while (true) {
            System.out.println("-----------------欢迎来到黑马系统------------------");
            System.out.println("1. 添加学生");
            System.out.println("2. 删除学生");
            System.out.println("3. 修改学生");
            System.out.println("4. 查询学生");
            System.out.println("5. 退出系统");
            System.out.println("请输入你的选择: ");
            Scanner sc = new Scanner(System.in);
            String choose = sc.next();//比nextint的容错率更高
            switch (choose) {
                case "1"-> addStudent(list);
                case "2"-> deleteStudent(list);
                case "3"-> updateStudent(list);
                case "4"-> queryStudent(list);
                case "5"-> {
                    System.out.println("退出系统");
                    break loop;
                }
                default -> System.out.println("没有这个选项");

            }
        }
    }

    //添加学生的方法:
    public static void addStudent(ArrayList<Student> list){
        Student stu = new Student();  //创建一个学生对象
        Scanner sc = new Scanner(System.in);
        String id = null;
        while (true) {
            System.out.println("请输入学生的ID: ");
            id = sc.next();
            //判断id唯一性
            boolean flag = contains(list, id);
            if(flag) {
                //表示id存在,需要重新录入
                System.out.println("id已存在,需要重新录入! ");
            }else {
                //表示id不存在,表示可以录入
                stu.setId(id);
                break;  //跳出循环
            }
        }

        System.out.println("请输入学生的姓名: ");
        String name = sc.next();
        stu.setName(name);
        System.out.println("请输入学生的年龄: ");
        int age = sc.nextInt();
        stu.setAge(age);
        System.out.println("请输入学生的家庭住址: ");
        String address = sc.next();
        stu.setAddress(address);

        list.add(stu);
        //提示
        System.out.println("学生信息添加成功!");

    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> list) {

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的id");
        String id = sc.next();
        //得到集合中的索引
        int index = getIndex(list, id);
        //大于等于0,表示存在,直接删除
        //如果-1,表示不存在,结束方法,回到初始菜单
        if (index >= 0) {
            list.remove(index);
            System.out.println("id为:"+id+"的学生已删除");
        }else {
            System.out.println("id不存在,删除失败");
        }
    }

    //修改学生
    public static void updateStudent(ArrayList<Student> list) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入需要修改的学生id");
            String id = sc.next();
            int index = getIndex(list, id);
            if(index >= 0) {
                Student stu = list.get(index);//找到索引的学生对象
                System.out.println("请输入需要修改"+id+"的姓名:");
                String name = sc.next();
                stu.setName(name);
                System.out.println("请输入需要修改"+id+"的年龄:");
                int age = sc.nextInt();
                stu.setAge(age);
                System.out.println("请输入需要修改"+id+"的家庭住址:");
                String address = sc.next();
                stu.setAddress(address);
                System.out.println("修改成功");
                break;
            }else {
                System.out.println("id不存在,修改失败,请重新输入:");
                break;
            }
        }
    }

    //查询学生
    public static void queryStudent(ArrayList<Student> list) {

        if(list.size()==0){
            System.out.println("当前没有学生信息,请添加后再查询");
            return;
        }
         //执行到这步,说明是有数据的
        System.out.println("id\t\t姓名\t年龄\t家庭住址");
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            String id = stu.getId();
            String name = stu.getName();
            int age = stu.getAge();
            String address = stu.getAddress();
            System.out.println(id+"\t"+name+"\t"+age+"\t"+address);
        }
    }

    //判断id是否存在
    public static boolean contains(ArrayList<Student> list,String id) {
        //循环遍历每个学生对象
        //拿到学生对象后,获取id进行判断
        //存在返回true
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            String sid = stu.getId();
            if(sid.equals(id)) {
                return true;
            }
        }
        return false;

        //还可以根据下面的代码进行复用
       // return getIndex(list,id) >= 0;
    }

    //通过id获取索引的方法
    public static int getIndex(ArrayList<Student> list,String id) {
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            //得到每个学生对象
            Student stu = list.get(i);

            //通过学生对象找到id
            String sid = stu.getId();

            //拿着集合中的学生id和需要删除的id进行比较,相同则返回索引
            if(sid.equals(id)) {
                return i;  //id如果一样则返回索引
            }
        }

        //当循环结束后没有找到,返回-1
        return -1;
    }
}
